<h1>请查看控制台与测试源码</h1>
<script src="https://cdn.bootcdn.net/ajax/libs/dayjs/1.11.5/dayjs.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.4/moment.js"></script>
<script src="./fmt.js"></script>
<script>
  /*
    冒号前的是  函数指令，冒号后的是 参数，  参数之间 逗号隔开
    直接匹配： 格式化指令:参数1,参数2,参数3
    模板字符串：  #{格式化指令:参数1,参数2,参数3}
  */
  const tests = [
    '数字',
    [12319874.2222, '哈喽#{}--#{n}~~#{n:3}~#{n:4}~ ;  #{p:2}'],
    [1.23, '你好：  #{p:2}'],
    [1.23,  '+:100,50,1000  '],
    [1.23,  '+:100,50,1000  & /:100000 & p:5'],
    '百分比',
    ['-0.12453', '你好：  #{p:3}'],
    ['-0.12453', '你好：  #{p:2, = %}'],
    ['-0.12553', '你好：#{p}'],
    '日期',
    ['1666336955513', '你好：#{d}====#{d:YYYY-MM-DD}'],
    [new Date(), '你好：#{d}====#{d:YYYY-MM-DD}'],
    [new Date(), '你好：#{n}---#{n:3}'],
    [+new Date(), '你好：#{d}====#{d:YYYY-MM-DD}'],
    [new Date(), 'd'],
    [new Date(), 'd:YYYY-MM-DD HH'],
    [+new Date(), 'd:0'],
    [new Date(), 'd:0'],
    [+new Date(), 'd:1'],
    [new Date(), 'd:2'],
    [+new Date(), 'd:2'],
    [new Date(), 'd:3'],
    [+new Date(), 'd:3'],
    [new Date(), 'd:4'],
    [+new Date(), 'd:4'],
    [new Date(), 'd:5'],
    [+new Date(), 'd:5'],
    '时间戳',
    [new Date,  'n'],
    [new Date,  'ts'],
    [new Date,  'unix'],
    [new Date,  'n= #{n} ,ts= #{ts} ,unix= #{unix} '],
    [new Date, ['n','ts','unix']],
    '星期',
    [+new Date(), 'wk'],
    [+new Date(), 'wk:zh'],
    '填充',
    [1, '#{0:4}'],
    [100, '#{0:4}'],
    [100000, '#{0:4}'],
    [100, '#{^:6,--}'],
    [100, '#{padStart:6,--}'],
    [22, '#{padStart:10,}'],
    [100000, '#{padEnd:10,+}'],
    [{ a: { b: { c: { demo: 111 } } } }, '#{attr:a.b.c.demo}'],
    [{ a: { b: { c: { demo: 111 } } } }, '#{attr:a.b.vvv,--}'],
    '大小写',
    ['spanFontSize', 'low'],
    ['spanFontSize', 'up'],
    '长度',
    ['spanFontSize', 'len'],
    '驼峰',
    ['span-font-size', 'hump'],
    '批量格式化',
    [{ a: { b: { c: { demo: 111 }, v: { ddee: 2233 } } } }, ['attr:a.b.c.demo', v => '<====' + JSON.stringify(v) + '====>']],
    [{ a: { b: { c: { demo: 0.11567 }, v: { ddee: 2233 } } } }, [{ value: v => v.a.b.c.demo, format: 'p:2' }, v => '<====' + JSON.stringify(v) + '====>']],
    [{ a: 111, b: { c: 222 } }, 'a:#{ prop : a },b:#{ prop : b.c}'],
    [{ a: 111, b: { c: 222 } }, { format: 'a:#{ prop : a },b:#{ prop :b.c}' }],
    [new Date, ['n','ts','unix']],
    '自定义格式化',
    [{ a: 0.11567, b: { c: 222222 } }, v => formatMethods.p(v.a, 2) + '~~~' + formatMethods.n(v.b.c, 3)],
    [{ a: 0.11567, b: { c: 222222 } }, { format: v => formatMethods.p(v.a, 2, '__%') + '~~~' + formatMethods.n(v.b.c, 3) }],
    '自定义模板替换字符串',
    [{ a: 111, b: { c: 222 } }, 'a:<% prop : a %>,b:<% prop :b.c %>', { _s: '<%', _e: '%>' }],
    [{ a: 111, b: { c: 222 } }, 'a:<% prop : a %>,b:<% prop :b.c %>', { _s: '<%', _e: '%>' }],
    [{ a: 111, b: { c: 222 } }, { format: 'a:{{ prop : a }},b:{{ prop :b.c }}' }, { _s: '{{', _e: '}}' }],
    [{ a: 111, b: { c: 222 } }, 'a={{ prop : a }},b={{ prop :b.c }}', { _s: '{{', _e: '}}' }],
    'dict字典匹配',
    [2, `dict:是/否/未知`],
    ['op1', formatMethods.dict, { opt: 1, op0: 'xczcxcz', op1: 'xcxc' }],
    [2, { methods: 'dict', args: ['是-否-未知', '-'] }],
    [2, { methods: 'dict', args: { 0: '是', 1: '否', 2: '未知' } }],
    [2, { methods: 'dict' }, { 0: '是', 1: '否', 2: '未知' }],
    '组合格式化（& 符号）',
    [{ a: 111, b: { c: 0.0222 } }, 'a= #{ prop : a & 0 : 7  },b= #{ prop : b.c & p: 4}'],
    [{ a: 111, b: { c: 0.0222 }, e: { f: { g: new Date() } } }, 'prop : e.f.g & n & d:2'],
    [{ a: 111, b: { c: 0.0222 }, e: { f: { g: new Date() } } }, 'a= #{ prop : a & 0 : 7  },b= #{ prop : b.c & p: 4} ,g= #{ prop : e.f.g & d:2} ,周#{prop : e.f.g & wk:zh}'],
    '时间范围',
    [new Date(), 'dateRange'],
    [new Date(), 'dateRange:month'],
    [new Date(), 'dateRange:month,n'],
    [new Date(), findMethod('dateRange')],
    [new Date(), { format: findMethod('dateRange') }],
    [findMethod('dateRange')(new Date(), 'day', 'n'), v => v],
    '错误模拟',
    ['span-font-size', 'n'],
    ['span-font-size', '#{n}'],
    ['span-font-size', 'p'],
    ['span-font-size', '#{p}'],
    ['span-font-size', ''],
    ['span-font-size', 'd'],
    ['span-font-size', '#{d}'],
    ['span-font-size', { format: '' }],
    ['span-font-size', [, , , ,]],
    ['op1', formatMethods.dict, {}],
  ]
  for (let t of tests) {
    if (typeof t == 'string') console.log(`==========${t}测试=========`)
    else console.log(`值: ${typeof t[0] == 'object' ? JSON.stringify(t[0]) : t[0]} 模板: `, typeof t[1] == 'object' ? JSON.stringify(t[1]) : t[1], ` ===> `, valueFormat(t[0], t[1], ...t.slice(2)))
  }
</script>
